﻿using System.Collections.Generic;
using AspectIntercept;
using GestorSQL.BusinessEntities;
using GestorSQL.DAO;
using GestorSQL.DAO.InterceptDAO;
using System.Linq;
using System.Text;

namespace GestorSQL.BLL
{
    [Intercept(InterceptAllMethods = true, PreProcesor = typeof(DBTraceProcessor), PostProcesor = typeof(DBTraceProcessor), OmitMethods = new string[] { })]
    public class ParameterManager : InterceptContext
    {
        #region Variables Privadas
        private IGestorSqlDao dao = new GestorSqlDao();

        #endregion

        #region Metodos Publicos
        /// <summary>
        /// Actualiza el valor y la descripcion del parametro 
        /// </summary>
        /// <param name="parametro">Parametro que se va actualizar</param>
        /// <returns></returns>
        public Resultado UpdateParameter(Parametro parametro)
        {
            return dao.UpdateParameter(parametro);
        }

        /// <summary>
        /// Obtiene la lista total de los parametros de configuracion inicial
        /// </summary>
        /// <returns></returns>
        [InterceptOmit]
        public List<Parametro> GetListParameters()
        {
            return dao.GetListParameters();
        }

        /// <summary>
        /// Obtiene una lista de palabras reservadas como alertask
        /// </summary>
        /// <returns></returns>
        public string GetReservedWordsAlertsByQuery(string query)
        {

            StringBuilder sb = new StringBuilder();

            List<string> palabrasReservadas = dao.GetValueFromParameter("Alertas_PalabrasReservadas").Split(';').ToList();

            foreach (var palabra in palabrasReservadas)
            {
                if (query.Contains(palabra))
                    sb.AppendLine(palabra);
            }

            return sb.ToString();
        }

        /// <summary>
        /// Obtiene el valor de un parametro dedo su id
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public object GetParameter(string key)
        {
            return dao.GetParameter(key);
        }

        #endregion
    }
}
